import axios from 'axios'
import { useUserStore } from '@/stores/user'
import router from '@/router'

// 创建 axios 实例
const http = axios.create({
  baseURL: import.meta.env.VITE_API_BASE_URL || '/api',
  timeout: 10000, // 建议添加超时设置
})

// 请求拦截器（处理认证）
http.interceptors.request.use(config => {
  // 跳过需要免认证的请求
  if (config.skipAuth) return config
  
  const userStore = useUserStore()
  const token = userStore.token || localStorage.getItem('token')
  
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
})

// 响应拦截器（统一错误处理）
http.interceptors.response.use(
  response => {
    // 可在此处处理全局成功逻辑
    return response.data || response
  },
  error => {
    const { config, response } = error
    
    // 网络错误处理
    if (!response) {
      console.error('Network Error', error)
      return Promise.reject({ message: '网络连接异常，请检查网络' })
    }

    // 401 未认证处理（排除标记 skipAuth 的请求）
    if (response.status === 401 && !config?.skipAuth) {
      const userStore = useUserStore()
      userStore.logout()
      
      // 避免重定向循环
      if (router.currentRoute.value.path !== '/login') {
        router.replace({
          path: '/login',
          query: { redirect: router.currentRoute.value.fullPath }
        })
      }
    }

    // 从响应中提取错误信息
    const errorMessage = response.data?.message || 
                        response.statusText || 
                        '请求处理失败'

    // 开发环境打印错误
    if (import.meta.env.DEV) {
      console.group('API Error')
      console.log('URL:', config.url)
      console.log('Code:', response.status)
      console.log('Message:', errorMessage)
      console.groupEnd()
    }

    return Promise.reject({
      code: response.status,
      message: errorMessage,
      data: response.data
    })
  }
)

export default http